from django.db import models
from django.utils.datetime_safe import datetime, date
from django.contrib.auth.models import User


RESULTADO = (
    ('X', 'X'),
    ('1', '1'),
    ('2', '2'),
    ('-', '-'),
)

class Equipo (models.Model):
    nombre = models.CharField (primary_key = True, max_length = 255)
    
    def __unicode__ (self):
        return unicode (self.nombre)
    
class Temporada (models.Model):
    fecha_ini = models.DateField (name = "Fecha de inicio de la temporada", primary_key = True)
    fecha_fin = models.DateField (name = "Fecha de fin de la temporada", unique = True )
    equipos = models.ManyToManyField(Equipo)

    def __unicode__(self):
        return "Temporada " + unicode(self.fecha_ini.year) + " - " + unicode(self.fecha_fin.year)
    
    @staticmethod
    def get_actual ():
        year = datetime.now().year
        print year
        return Temporada.objects.filter( fecha_ini__year = year )[0]

class Partido (models.Model):
    equipo_casa = models.ForeignKey ( 'Equipo', related_name = 'casa' )
    equipo_visitante = models.ForeignKey ( 'Equipo', related_name = 'visitante' )
    jornada = models.ForeignKey ( 'Jornada')
    
    def __unicode__(self):
        return unicode(self.jornada) + ": " + unicode (self.equipo_casa) + " - " + unicode (self.equipo_visitante) 

class Resultado (Partido):
    res = models.CharField (choices = RESULTADO, max_length = 1)
    
    def __unicode__(self):
        return Partido.__unicode__(self) + ": " + unicode (self.res)
    
class ResultadoSet (models.Model):
    resultados = models.ManyToManyField(Resultado)
    resultado15 = models.ForeignKey ( 'Resultado', related_name = 'pleno15' )
    
    def __unicode__(self):
        str = ''
        for resultado in self.resultados.all():
            str = str + unicode (resultado) + '\n'
        return str + unicode (self.resultado15)

class Jornada (models.Model):
    fecha_ini = models.DateTimeField (name = "Fecha de inicio de la jornada" )
    fecha_fin = models.DateTimeField (name = "Fecha de fin de la jornada" )
    temporada = models.ForeignKey ( 'Temporada', related_name = 'temporada' )
    resultado = models.ForeignKey ('ResultadoSet', related_name = 'resultado_jornada', null=True, blank=True )
#    resultados = models.ManyToManyField(Resultado)
#    resultado15 = models.ForeignKey ( 'Resultado', related_name = 'pleno15' )
#    quiniela = models.ForeignKey ( 'Quiniela', blank = True, null=True, related_name = 'quiniela_resultado')
    
    def __unicode__(self):
        return "Jornada " + unicode (self.get_num())# + ' (' + unicode(self.fecha_ini) + " - " + unicode(self.fecha_fin) +')'
    
    def get_num (self):
        return Jornada.objects.order_by('fecha_ini').filter(fecha_ini__lte=self.fecha_ini).count()
    
    @staticmethod
    def get_actual ():
        jornada = Jornada.objects.all().filter( fecha_fin__lte = datetime.now() )[0]#.filter (fecha_ini__gte = datetime.now() )[0]
        print jornada
        return jornada
    
class UserQuiniela(User):
    class Meta:
        proxy = True
    
class Quiniela (models.Model):
    jornada = models.ForeignKey ( 'Jornada', related_name = 'jornada' )
    user = models.ForeignKey ('UserQuiniela', related_name = 'creador')
    resultado = models.ForeignKey ('ResultadoSet', related_name = 'resultado_quiniela')


    def __unicode__(self):
        return "Quiniela: " + unicode (self.jornada)
    
    @staticmethod
    def get_actual ():
        return Quiniela.objects.get( jornada = Jornada.get_actual().id )
    
    #TODO validar que hay 14 partidos y un pleno al 15

    
    
    

    
    
    